//#include "matrix44.h"
//#include "math.h"
//
////------------------------------------------- SetMatrixColumn --------------------------------------------//
//template< class T >
//void Matrix44< T >::SetMatrixColumn(int cNr, T x, T y, T z, T w)
//{
//	--cNr;
//
//	m[ cNr*4 + 0 ] = x;
//	m[ cNr*4 + 1 ] = y;
//	m[ cNr*4 + 2 ] = z;
//	m[ cNr*4 + 3 ] = w;
//}
////------------------------------------------- LoadIdentity -----------------------------------------------//
//template< class T >
//void Matrix44< T >::LoadIdentity()
//{
//	m = { 
//			1, 0, 0, 0,
//			0, 1, 0, 0,
//			0, 0, 1, 0,
//			0, 0, 0, 1
//		};
//}
//
////------------------------------------------- LoadRotationAboutArbitrary ----------------------------------//
//template< class T >
//void Matrix44< T >::LoadRotationAboutArbitrary( float angle, T x, T y, T z )
//{
//	T mag, s, c;
//	T xx, yy, zz, xy, yz, zx, xs, ys, zs, one_c;
//
//	s = T(sin(angle));
//	c = T(cos(angle));
//
//	mag = T(sqrt( x*x + y*y + z*z ));
//
//	// Identity matrix
//	if (mag == 0.0f) 
//	{
//		LoadIdentity();
//		return;
//	}
//
//	// Rotation matrix is normalized
//	x /= mag;
//	y /= mag;
//	z /= mag;
//
//	#define M(row,col)  m[col*4+row]
//
//		xx = x * x;
//		yy = y * y;
//		zz = z * z;
//		xy = x * y;
//		yz = y * z;
//		zx = z * x;
//		xs = x * s;
//		ys = y * s;
//		zs = z * s;
//		one_c = 1.0f - c;
//
//		M(0,0) = (one_c * xx) + c;
//		M(0,1) = (one_c * xy) - zs;
//		M(0,2) = (one_c * zx) + ys;
//		M(0,3) = 0.0f;
//
//		M(1,0) = (one_c * xy) + zs;
//		M(1,1) = (one_c * yy) + c;
//		M(1,2) = (one_c * yz) - xs;
//		M(1,3) = 0.0f;
//
//		M(2,0) = (one_c * zx) - ys;
//		M(2,1) = (one_c * yz) + xs;
//		M(2,2) = (one_c * zz) + c;
//		M(2,3) = 0.0f;
//
//		M(3,0) = 0.0f;
//		M(3,1) = 0.0f;
//		M(3,2) = 0.0f;
//		M(3,3) = 1.0f;
//
//	#undef M
//}
//
////---------------------------------------------- copy constructor -----------------------------------------///
//template< class T >
//Matrix44< T >::Matrix44( const Matrix44< T >& M )
//{
//	for( int ii = 0; ii < 16; ++ii )
//		m[ ii ] = M.m[ ii ];
//}
////---------------------------------------------- operator= ------------------------------------------------//
//template< class T >
//void Matrix44< T >::operator=( const Matrix44< T >& M )
//{
//	for( int ii = 0; ii < 16; ++ii )
//		m[ ii ] = M.m[ ii ];
//}
////------------------------------------------------ operator* ----------------------------------------------//
//template< class T >
//Matrix44< T > Matrix44< T >::operator*( const T& scalar )
//{
//	Matrix44< T > M;
//
//	for( int ii = 0; ii < 16; ++ii )
//		M.m[ ii ] = m[ ii ] * scalar;
//
//	return M;
//}